////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  upscale_2_0_0.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef UPSCALE_2_0_0_H
#define UPSCALE_2_0_0_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "ispglobalelements.h"

#define UPSCALE_2_0_0_NAMESPACE_BEGIN namespace upscale_2_0_0 {
#define UPSCALE_2_0_0_NAMESPACE_END }

UPSCALE_2_0_0_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// upscale20_rgn_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct upscale20_rgn_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sharp_factor
    ///
    /// Tuning Level:  must_tune
    /// Description:   sharp_factor specifies sharpness/smooth level, positive for sharpness, 100 means 100% sharpness, negative
    ///                value for smooth, -100 means 100% smoth, 0 means no sharpening/smooth applied.
    /// Default Value: 0
    /// Range:         [-100, 100]
    /// Bit Depth:     signed 8 bits
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT sharp_factor;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_upscale20_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_upscale20_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::trigger_pt_type_aec    aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// upscale20_rgn_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    upscale20_rgn_dataType upscale20_rgn_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_upscale20_total_scale_ratio_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_upscale20_total_scale_ratio_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// total_scale_ratio_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ispglobalelements::trigger_pt_type        total_scale_ratio_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// total_scale_ratio_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct total_scale_ratio_dataStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mod_upscale20_aec_data - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                      mod_upscale20_aec_dataCount;
        UINT32                      mod_upscale20_aec_dataID;
        mod_upscale20_aec_dataType* mod_upscale20_aec_data;
    } total_scale_ratio_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_upscale20_coreType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_upscale20_coreType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mod_upscale20_total_scale_ratio_data - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                                    mod_upscale20_total_scale_ratio_dataCount;
    UINT32                                    mod_upscale20_total_scale_ratio_dataID;
    mod_upscale20_total_scale_ratio_dataType* mod_upscale20_total_scale_ratio_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_upscale20_reserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_upscale20_reserveType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Enable/Disable Detail Enhancerr
    /// Default Value: 1
    /// Range:         [0, 1]
    /// Bit Depth:     1 bit
    /// Conversion:    No Conversion needed
    /// Notes:         0 DE disable, 1 DE enable
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// de_clip_shift
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   local dynamic clipping parameter within Detail Ehancement. When DE_CLIP_shift is more than 0, this
    ///                feature will be on. When it is on, the clipping would be based on the local supporting region's
    ///                minimal\maximal levels, other than the global minimal\maximal levels (0 and 1023).
    /// Default Value: 0
    /// Range:         [0, 7]
    /// Bit Depth:     3 bits
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 de_clip_shift;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sharpening_strength1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   sharpening strength level when (delta)out is no more than dECurveT1
    /// Default Value: 32
    /// Range:         [-32, 160]
    /// Bit Depth:     9 bits. Signed Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 sharpening_strength1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sharpening_strength2
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   sharpening strength level when (delta)out is more than dECurveT1
    /// Default Value: 32
    /// Range:         [-32, 160]
    /// Bit Depth:     9 bits. Signed Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 sharpening_strength2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// tquiet
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Quiet zone threshold
    /// Default Value: 0
    /// Range:         [0, 255]
    /// Bit Depth:     8 bits. Unsigned Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 tquiet;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// decurvet1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Threshold low (equal or larger than tquiet)
    /// Default Value: 0
    /// Range:         [0, 255]
    /// Bit Depth:     8 bits. Unsigned Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 decurvet1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// decurvet2
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Threshold high (equal or larger than decurvet1)
    /// Default Value: 512
    /// Range:         [0, 1023]
    /// Bit Depth:     10 bits. Unsigned Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 decurvet2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// curverange
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Dieout zone threshold (equal or larger than decurvet2)
    /// Default Value: 1023
    /// Range:         [0, 1023]
    /// Bit Depth:     4 bits. Unsigned Q0
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 curverange;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// delimiter
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   detail enhancement limit value
    /// Default Value: 5
    /// Range:         [0, 15]
    /// Bit Depth:     1 bit
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 delimiter;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// blend_filter
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   This signal chooses the filter that is combined with directional filter to generate filter coefficients
    ///                for edge-directed interpolation
    /// Default Value: 0
    /// Range:         [0, 1]
    /// Bit Depth:     1 bit
    /// Conversion:    No Conversion needed
    /// Notes:         0 (circular filter), 1 (separable filter)
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 blend_filter;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// comp0_filter_method
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   This signal specifies the scaling method that is applied to Y component of YUV format
    /// Default Value: 0
    /// Range:         [0, 3]
    /// Bit Depth:     2 bits
    /// Conversion:    No Conversion needed
    /// Notes:         0x0: 2D 4x4; 0x1: 2D Circular; 0x2: 1D Separable; 0x3: bilinear
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 comp0_filter_method;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// comp1_2_filter_method
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   This signal chooses the filter that is combined with directional filter to generate filter coefficients
    ///                for edge-directed interpolation for CbCr channel
    /// Default Value: 0
    /// Range:         [0, 3]
    /// Bit Depth:     2 bits
    /// Conversion:    No Conversion needed
    /// Notes:         0x0: Same coefficients as Y; 0x1: 2D Circular; 0x2: 1D Separable; 0x3: bilinear
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 comp1_2_filter_method;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_upscale20Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_upscale20Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable_section
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct enable_sectionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        globalelements::enable_flag_type upscale_enable;
    } enable_section;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_variables
    ///
    /// Default Value: control_total_scale_ratio, control_gain
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_variablesStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// control_var_type - Array
        /// Default Value: control_total_scale_ratio, control_gain
        /// Length:        2
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        enum class control_var_typeEnum
        {
            control_lux_idx           = 0,
            control_gain              = 1,
            control_total_scale_ratio = 2
        } control_var_type[2];
    } control_variables;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_methodStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_exp_control
        /// Default Value: control_gain
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_type aec_exp_control;
    } control_method;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_upscale20_reserve
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_upscale20_reserveType chromatix_upscale20_reserve;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_upscale20_core
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_upscale20_coreType    chromatix_upscale20_core;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_upscale20TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatix_upscale20TypeClass : public ParameterModule, public chromatix_upscale20Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 2;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_upscale20TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_upscale20TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatix_upscale20TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load upscale20_rgn_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadupscale20_rgn_dataType(
        ParameterFileSymbolTableEntry* entry,
        upscale20_rgn_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_upscale20_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_upscale20_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_upscale20_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_upscale20_total_scale_ratio_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_upscale20_total_scale_ratio_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_upscale20_total_scale_ratio_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_upscale20_total_scale_ratio_dataType_total_scale_ratio_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_upscale20_total_scale_ratio_dataType_total_scale_ratio_dataStruct(
        ParameterFileSymbolTableEntry* entry,
        mod_upscale20_total_scale_ratio_dataType::total_scale_ratio_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_upscale20_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_upscale20_coreType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_upscale20_reserveType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_upscale20_reserveType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20_reserveType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_upscale20Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_upscale20Type(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load enable_sectionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadenable_sectionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20Type::enable_sectionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_variablesStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_variablesStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20Type::control_variablesStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_methodStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_methodStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_upscale20Type::control_methodStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_upscale20_total_scale_ratio_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_upscale20_total_scale_ratio_dataType(
        mod_upscale20_total_scale_ratio_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_upscale20_total_scale_ratio_dataType_total_scale_ratio_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_upscale20_total_scale_ratio_dataType_total_scale_ratio_dataStruct(
        mod_upscale20_total_scale_ratio_dataType::total_scale_ratio_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_upscale20_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_upscale20_coreType(
        chromatix_upscale20_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_upscale20Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_upscale20Type(
        chromatix_upscale20Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatix_upscale20TypeClass

UPSCALE_2_0_0_NAMESPACE_END
#endif // UPSCALE_2_0_0_H

